// 封装发送请求地址
import axios from 'axios'
import router from '@/router'
import store from '@/store'
// 基于axios 创建create创建实例
// 基准路劲
const baseURL = 'https://apipc-xiaotuxian-front.itheima.net/'
const instance = axios.create({
  baseURL: baseURL
})
// 请求拦截器
instance.interceptors.request.use(config => {
  // 统一添加请求头token（token存在时添加）
  const token = store.state.user.profile.token
  if (token) { // 有token 发送请求时统一携带求头
    config.headers.Authorization = `Bearer ${token}`
  }
  return config
}, err => {
  return Promise.reject(err)
})

// 响应拦截器
instance.interceptors.response.use(res => {
  // 处理返回的数据:去掉一层data属性
  return res.data
}, err => {
  // 处理token失效的情况：失效后跳转到登录页面
  if (err.response && err.response.status === 401) {
    // token失效了，跳转到登录页面
    router.push('/login')
  }
  return Promise.reject(err)
})
// 导出请求函数
export default (options) => {
  let key = ''
  if (options.method) { // 判断method方式来确定请求参数的形式
    key = options.method.toUpperCase() === 'GET' ? 'params' : 'data'
    // 要是get就是params 带参数 反之data带参
  } else { // 没有请求方式
    key = 'params'
  }
  return instance({
    method: options.method || 'get', // 当没有传请求方式默认就是get
    url: options.url, // 请求地址
    [key]: options.data // 统一传参的形式都是data es6中对象的键也阔以是动态的哈
  })
}
